Корабельная роща.
1898. При сравнении колорита «Корабельной рощи»,
позднего произведения Шишкина, с колоритом ранних его работ, ясно видно, что
художник-пейзажист, подобно своим современникам-жанристам, перешел от
локального понимания цвета к скупой, но целостной цветовой гамме. В основе этой
гаммы лежит передача объединяющей изображение светотени.
В этой картине Шишкин нашел в цветовом
объединении серовато-коричневых стволов елей и зелени мха на первом плане новое
для себя тональное понимание цвета.
Картина интересна также новым способом
передачи пространства леса. Деревья изображаются не целиком, а как бы срезаются
рамой. Ели даются видимыми в непосредственной близости, но когда зритель
смотрит на них, он не способен охватить всю картину в целом.
В непрозрачной закрытой урне с
небольшим отверстием в крышке находится n
шаров (n – четное число), половина из
которых черные, а другая половина – белые. У Вас есть симметрическая монета,
которую Вы начинаете подбрасывать.
·
Если
выпадает орел, Вы извлекаете белый шар;
·
Если
выпадает решка, Вы извлекаете черный шар;
Этот процесс продолжается до тех пор,
пока в урне не останется ровно два шара. В этот момент они оказываются
одинакового цвета, и дальнейшие подбрасывания монеты теряют смысл. До этого
момента в урне всегда присутствует хотя бы один черный и хотя бы один белый
шар.
Какова вероятность того, что
произойдет описанная ситуация?
Вход. Каждая строка представляет собой
отдельный тест и содержит одно четное число n
(0 < n £ 105) – количество шаров в урне.
Выход. Для
каждого теста выведите в отдельной строке вероятность того, что произойдет
описанная ситуация. Ответ должен быть выведен с точностью до восьми десятичных
знаков.
Пример входа |
Пример выхода |
6 10 256 |
0.62500000 0.72656250 0.94998552 |
теория
вероятности
Вычислим
вероятность противоположного события X – того, что последними будут вынуты шары разного
цвета. Для этого среди первых n – 2 вынутых шаров ровно половина должна
быть белыми, а половина – черными.
Рассмотрим схему испытаний Бернулли,
где вероятность успеха (например, появления белого шара) равна p = 1/2, а неуспеха q = 1 – p = 1/2.
Вероятность того, что среди n – 2 вынутых шаров окажется ровно (n
– 2) / 2 белых, вычисляется по формуле:
P(X) = =
Остается
для каждого входного n вычислить
значение P(X) и вывести 1 – P(X).
Хотя P(X) находится
в пределах от 0 до 1 включительно, его непосредственное вычисление может
привести к числовым проблемам. Чтобы избежать этого, вычислим логарифм:
ln P(X) =
ln(n – 2)! – –
После
вычисления правой части равенства возведем е
в полученное значение, чтобы восстановить P(X). Логарифм факториала вычислим
как сумму логарифмов:
ln n! = ln 1 + ln 2 + ln 3 + … + ln n
Так как на
вход программы подаются несколько тестов, все ответы следует предвычислить и сохранить
в массиве.
Для n = 6 вероятность того, что последними будут вынуты
шары разного цвета, равна
=
=
Вероятность
того, что последними
будут вынуты шары одного цвета, равна
1 – =
= 0,625
Объявим
необходимые массивы. В ячейке ans[i] будем хранить значение .
#define MAX 100001
double lf[MAX], ans[MAX];
Заполним
массив lf, где lf[i] хранит значение ln i!.
res = lf[1] = 0.0;
for (res = 0, i = 2; i < MAX; i++)
{
res += log((double)i);
lf[i] = res;
}
Для
каждого значения i вычислим и сохраним результат в ans[i].
for (i = 2; i < MAX; i += 2)
{
res = lf[i/2-1];
res = lf[i-2] - (i - 2) * log(2.0) – res - res;
ans[i] =
exp(res);
}
Для
каждого входного значения n вычисляем и выводим ответ.
while (scanf("%d",&n)
== 1)
printf("%.8lf\n",1 - ans[n]);